package swardToOffer.struct_3_linkedlist;

/**
 * @Author ChanZany
 * @Date 2021/5/21 8:52
 * @Version 1.0
 * // 面试题18（二）：删除链表中重复的结点
 * // 题目：在一个排序的链表中，如何删除重复的结点？例如，在图3.4（a）中重复
 * // 结点被删除之后，链表如图3.4（b）所示。
 * 思路：排序的链表，则重复的节点一定是连在一起的
 */
public class DeleteDuplicatedNode {

    ListNode delDup(ListNode head) {
        if (head == null) return null;
        ListNode p = head;
        ListNode preNode = new ListNode();//哑节点
        ListNode p2 = preNode;
        while (p != null) {
            ListNode next = p.next;
            if (next != null && next.val == p.val) { //当前节点和next节点都要删除
                p = next.next;
            }
            p2.next = p;
            p2 = p2.next;
            p = p.next;
        }
        return preNode.next;
    }

    public static void main(String[] args) {
        DeleteDuplicatedNode Main = new DeleteDuplicatedNode();
        ListNode head = new ListNode(1);
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        head.next = node1;
        node1.next = node2;
        node2.next = node3;
        head = Main.delDup(head);
        new PrintLinkedListReversely().printLNR(head);
    }

}
